﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using docTissV2.Enumeradores;

namespace docTissV2.Classes
{
    public class XPathCustomXml
    {
        #region Properties

        private string registroANS = "";
        public string RegistroANS
        {
            get { return registroANS; }
            set { registroANS = value; }
        }
        private string nomeContratado = "";
        public string NomeContratado
        {
            get { return nomeContratado; }
            set { nomeContratado = value; }
        }
        private string tipoLogradouro = "";
        public string TipoLogradouro
        {
            get { return tipoLogradouro; }
            set { tipoLogradouro = value; }
        }
        private string logradouro = "";
        public string Logradouro
        {
            get { return logradouro; }
            set { logradouro = value; }
        }
        private string numero = "";
        public string Numero
        {
            get { return numero; }
            set { numero = value; }
        }
        private string complemento = "";
        public string Complemento
        {
            get { return complemento; }
            set { complemento = value; }
        }
        private string codigoIBGEMunicipio = "";
        public string CodigoIBGEMunicipio
        {
            get { return codigoIBGEMunicipio; }
            set { codigoIBGEMunicipio = value; }
        }
        private string municipio = "";
        public string Municipio
        {
            get { return municipio; }
            set { municipio = value; }
        }
        private string codigoUF = "";
        public string CodigoUF
        {
            get { return codigoUF; }
            set { codigoUF = value; }
        }
        private string cep = "";
        public string Cep
        {
            get { return cep; }
            set { cep = value; }
        }
        private string codigoPrestadorNaOperadora = "";
        public string CodigoPrestadorNaOperadora
        {
            get { return codigoPrestadorNaOperadora; }
            set { codigoPrestadorNaOperadora = value; }
        }
        private string cpf = "";
        public string CPF
        {
            get { return cpf; }
            set { cpf = value; }
        }
        private string cnpj = "";
        public string CNPJ
        {
            get { return cnpj; }
            set { cnpj = value; }
        }
        private string nomeProfissional = "";
        public string NomeProfissional
        {
            get { return nomeProfissional; }
            set { nomeProfissional = value; }
        }
        private string siglaConselho = "";
        public string SiglaConselho
        {
            get { return siglaConselho; }
            set { siglaConselho = value; }
        }
        private string numeroConselho = "";
        public string NumeroConselho
        {
            get { return numeroConselho; }
            set { numeroConselho = value; }
        }
        private string ufConselho = "";
        public string UFConselho
        {
            get { return ufConselho; }
            set { ufConselho = value; }
        }
        private string cnes = "";
        public string CNES
        {
            get { return cnes; }
            set { cnes = value; }
        }
        private string cbos = "";
        public string CBOS
        {
            get { return cbos; }
            set { cbos = value; }
        }

        #endregion
        /// <summary>
        /// Mapeia os endereços (xPath) do customXML de acordo com o tipo da guia e o tipo do profissional
        /// </summary>
        /// <param name="tipoGuia"></param>
        /// <param name="tipoProfissional">Profissional Solicitante OU Executante</param>
        public XPathCustomXml(TipoGuia tipoGuia, TipoProfissional tipoProfissional)
        {
            if (tipoProfissional != TipoProfissional.ProfissionalSolicitanteExecutante)
            {
                string xPathGuia = "";
                string conselhoProfissional = "";
                switch (tipoGuia)
                {
                    case TipoGuia.Consulta:
                    case TipoGuia.Consulta_Reapresentação:
                        xPathGuia = "//ans:dadosContratado";
                        if (tipoProfissional == TipoProfissional.ProfissionalExecutante)
                        {
                            NomeProfissional = "//ans:profissionalExecutante/ans:nomeProfissional";
                            conselhoProfissional = "//ans:profissionalExecutante/ans:conselhoProfissional";
                            cbos = "//ans:profissionalExecutante/ans:cbos";
                        }
                        break;
                    case TipoGuia.Resumo_Internação:
                    case TipoGuia.Resumo_Internação_Reapresentação:
                        xPathGuia = "//ans:identificacaoExecutante";
                        break;
                    case TipoGuia.Honorário_Individual:
                    case TipoGuia.Honorário_Individual_Reapresentação:
                        switch (tipoProfissional)
                        {
                            case TipoProfissional.ProfissionalSolicitante:
                                xPathGuia = "//ans:contratado";
                                break;
                            case TipoProfissional.ProfissionalExecutante:
                                xPathGuia = "//ans:contratadoExecutante";

                                NomeProfissional = "//ans:identificacaoProfissional/ans:nomeExecutante";
                                conselhoProfissional = "//ans:identificacaoProfissional/ans:conselhoProfissional";
                                cbos = "//ans:identificacaoProfissional/ans:codigoCBOS";
                                break;
                            default:
                                break;
                        }
                        break;
                    case TipoGuia.SP_SADT:
                    case TipoGuia.SP_SADT_Reapresentação:
                        switch (tipoProfissional)
                        {
                            case TipoProfissional.ProfissionalSolicitante:
                                xPathGuia = "//ans:dadosSolicitante/ans:contratado";

                                NomeProfissional = "//ans:profissional/ans:nomeProfissional";
                                conselhoProfissional = "//ans:profissional/ans:conselhoProfissional";
                                cbos = "//ans:profissional/ans:cbos";
                                break;
                            case TipoProfissional.ProfissionalExecutante:
                                xPathGuia = "//ans:prestadorExecutante";

                                NomeProfissional = "//ans:profissionalExecutanteCompl/ans:nomeExecutante";
                                conselhoProfissional = "//ans:profissionalExecutanteCompl/ans:conselhoProfissional";
                                cbos = "//ans:profissionalExecutanteCompl/ans:codigoCBOS";
                                break;
                            default:
                                break;
                        }
                        break;
                    case TipoGuia.Odontologia:
                    case TipoGuia.Odontologia_Reapresentação:
                        xPathGuia = "//ans:dadosContratadoExecutante/ans:dadosContratado";
                        if (tipoProfissional == TipoProfissional.ProfissionalExecutante)
                        {
                            NomeProfissional = "//ans:dadosContratadoExecutante/ans:dadosExecutante/ans:nomeExecutante";
                            conselhoProfissional = "//ans:dadosContratadoExecutante/ans:dadosExecutante/ans:conselhoProfissional";
                            cbos = "//ans:dadosContratadoExecutante/ans:dadosExecutante/ans:codigoCBOS";
                        }
                        break;
                    //case TipoGuia.Solicitação_Internação:
                    //case TipoGuia.Solicitação_Prorrogação:
                    //case TipoGuia.Solicitação_SADT:
                    //case TipoGuia.Solicitação_Odontologia:
                    default:
                        break;
                }

                if (!xPathGuia.Equals(""))
                {
                    RegistroANS = "//ans:registroANS";
                    NomeContratado = xPathGuia + "/ans:nomeContratado";

                    string xPathEnderecoContratado = xPathGuia + "/ans:enderecoContratado";
                    TipoLogradouro = xPathEnderecoContratado + "/ans:tipoLogradouro";
                    Logradouro = xPathEnderecoContratado + "/ans:logradouro";
                    Numero = xPathEnderecoContratado + "/ans:numero";
                    Complemento = xPathEnderecoContratado + "/ans:complemento";
                    CodigoIBGEMunicipio = xPathEnderecoContratado + "/ans:codigoIBGEMunicipio";
                    Municipio = xPathEnderecoContratado + "/ans:municipio";
                    CodigoUF = xPathEnderecoContratado + "/ans:codigoUF";
                    Cep = xPathEnderecoContratado + "/ans:cep";

                    CodigoPrestadorNaOperadora = xPathGuia + "/ans:identificacao/ans:codigoPrestadorNaOperadora";
                    CPF = xPathGuia + "/ans:identificacao/ans:CPF";
                    CNPJ = xPathGuia + "/ans:identificacao/ans:CNPJ";
                    CNES = xPathGuia + "/ans:numeroCNES";
                }
                if (!conselhoProfissional.Equals(""))
                {
                    SiglaConselho = conselhoProfissional + "/ans:siglaConselho";
                    NumeroConselho = conselhoProfissional + "/ans:numeroConselho";
                    UFConselho = conselhoProfissional + "/ans:ufConselho";
                }
            }
        }
    }
}
